perm filename REVAL[F75,JMC]1 blob sn#191108 filedate 1975-12-11 generic text, type C, neo UTF8
COMMENT āŠ—   VALID 00002 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002
C00007 ENDMK
CāŠ—;


(DEFPROP ALLFNS
 (NIL OEV REV1 REV COUNT SUBB ELEM OEVAL REVAL1 REVAL PRUP X1 X2 X3 X4 X5)
VALUE)

(DEFPROP OEV
 (LAMBDA (U V) ((LAMBDA (M) (CONS (OEVAL U V) COUNT)) (SETQ COUNT 0)))
EXPR)

(DEFPROP REV1
 (LAMBDA (U V) ((LAMBDA (M) (CONS (REVAL1 U V) COUNT)) (SETQ COUNT 0)))
EXPR)

(DEFPROP REV
 (LAMBDA (U V) ((LAMBDA (M) (CONS (REVAL U V) COUNT)) (SETQ COUNT 0)))
EXPR)

(DEFPROP COUNT
 (NIL . 4)
VALUE)

(DEFPROP SUBB
 (LAMBDA (X Y Z) (IF (ATOM Z) (IF (EQ Y Z) X Z) (CONS (SUBB X Y (CAR Z)) (SUBB X Y (CDR Z)))))
EXPR)

(DEFPROP ELEM
 (NIL ATOM EQ EQUAL CAR CDR CONS NULL LIST CADR CAAR CDAR CDDR)
VALUE)

(DEFPROP OEVAL
 (LAMBDA(E A)
  ((LAMBDA(V)
    (COND ((ATOM E) (CDR (ASSOC E A)))
	  ((EQ (CAR E) (QUOTE QUOTE)) (CADR E))
	  ((EQ (CAR E) (QUOTE IF)) (COND ((OEVAL (CADR E) A) (OEVAL (CADDR E) A)) (T (OEVAL (CADDDR E) A))))
	  ((MEMBER (CAR E) ELEM)
	   (EVAL (CONS (CAR E) (MAPCAR (FUNCTION (LAMBDA (W) (LIST (QUOTE QUOTE) (OEVAL W A)))) (CDR E)))))
	  (T
	   ((LAMBDA(Z)
	     (OEVAL (CADDR Z) (APPEND (PRUP (CADR Z) (MAPCAR (FUNCTION (LAMBDA (W) (OEVAL W A))) (CDR E))) A)))
	    (GET (CAR E) (QUOTE EXPR))))))
   (SETQ COUNT (ADD1 COUNT))))
EXPR)

(DEFPROP REVAL1
 (LAMBDA(E A)
  ((LAMBDA(V)
    (COND ((ATOM E) ((LAMBDA (W) (REVAL1 (CAR W) (CADR W))) (CDR (ASSOC E A))))
	  ((EQ (CAR E) (QUOTE QUOTE)) (CADR E))
	  ((EQ (CAR E) (QUOTE IF)) (COND ((REVAL1 (CADR E) A) (REVAL1 (CADDR E) A)) (T (REVAL1 (CADDDR E) A))))
	  ((MEMBER (CAR E) ELEM)
	   (EVAL (CONS (CAR E) (MAPCAR (FUNCTION (LAMBDA (W) (LIST (QUOTE QUOTE) (REVAL1 W A)))) (CDR E)))))
	  (T
	   ((LAMBDA(W)
	     (REVAL1 (CADDR W) (APPEND (PRUP (CADR W) (MAPCAR (FUNCTION (LAMBDA (Z) (LIST Z A))) (CDR E))) A)))
	    (GET (CAR E) (QUOTE EXPR))))))
   (SETQ COUNT (ADD1 COUNT))))
EXPR)

(DEFPROP REVAL
 (LAMBDA(E A)
  ((LAMBDA(V)
    (COND ((ATOM E)
	   ((LAMBDA(W)
	     ((LAMBDA (Z) ((LAMBDA (U) Z) (RPLACD W (LIST (LIST (QUOTE QUOTE) Z) NIL))))
	      (REVAL (CADR W) (CADDR W))))
	    (ASSOC E A)))
	  ((EQ (CAR E) (QUOTE QUOTE)) (CADR E))
	  ((EQ (CAR E) (QUOTE IF)) (COND ((REVAL (CADR E) A) (REVAL (CADDR E) A)) (T (REVAL (CADDDR E) A))))
	  ((MEMBER (CAR E) ELEM)
	   (EVAL (CONS (CAR E) (MAPCAR (FUNCTION (LAMBDA (W) (LIST (QUOTE QUOTE) (REVAL W A)))) (CDR E)))))
	  (T
	   ((LAMBDA(W)
	     (REVAL (CADDR W) (APPEND (PRUP (CADR W) (MAPCAR (FUNCTION (LAMBDA (Z) (LIST Z A))) (CDR E))) A)))
	    (GET (CAR E) (QUOTE EXPR))))))
   (SETQ COUNT (ADD1 COUNT))))
EXPR)

(DEFPROP PRUP
 (LAMBDA (U V) (COND ((NULL U) NIL) (T (CONS (CONS (CAR U) (CAR V)) (PRUP (CDR U) (CDR V))))))
EXPR)

(DEFPROP X1
 (NIL (U (QUOTE (A B)) NIL) (V (QUOTE C) NIL) (W (QUOTE (C . C)) NIL))
VALUE)

(DEFPROP X2
 (NIL (U A B) (V . C) (W C . C))
VALUE)

(DEFPROP X3
 (NIL SUBB (QUOTE A) (QUOTE X) (QUOTE (((X . X) (X . X)) (X . X) X . X)))
VALUE)